<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>深拷贝</title>
</head>
<body>
    
</body>
</html>
<script>
    //浅拷贝不会将深层数据复制
    // let obj = {
    //     name : '后盾人',
    //     user : {
    //         name : 'hdcms'
    //     }
    // };
    // let a = obj;
    // let b = obj;
    // // console.log(a === b)


    // function copy(object){
    //     let obj = {};
    //     for(const key in object){
    //         obj[key] = object[key];
    //     }
    //     return obj;
    // }
    // let newObj = copy(obj);
    // newObj.name = 'hdcms';
    // //这边修改新的对象属性之前的也会发生改变，因为里面的user对象是一个单独的内存地址
    // //当下面拷贝之后使用的时候依然使用的是这个内存地址  
    // //浅拷贝 只能拷贝到表面的属性  但是更深层次的属性是不能被复制的 只是引用
    // newObj.user.name = 'houdunren.com';
    // console.log(newObj);
    // console.log(obj);


    //深拷贝的意思就是   复制一个对象   两个完全独立的对象
    let obj = {
        name : "后盾人",
        user : {
            name : "hdcms"
        },
        datas:[]
    };

    //一层一层的往进循环   如果碰到属性值是对象的时候继续递归  直到结束为止

    function copy(object){
        console.log(object)
        //两层循环就可以进行多层次的复制 这里的复制就是完全的复制 
        let obj = object instanceof Array ? [] : {};
        // console.log(object instanceof Array)
        for(const [k,v] of Object.entries(object)){
            obj[k] = typeof v == 'object' ? copy(v) : v;
        }
        return obj;
    }
    let hd = copy(obj);
    hd.user.name = 'houdunren.com';
    console.log(JSON.stringify(obj,null,1))
    console.log(JSON.stringify(hd,null,2))
    
</script>